import 'post_type.dart';
import 'category_model.dart';

/// 发表动态模型
class PublishPostModel {
  PostType postType;
  String? coverUrl;           // 封面图片URL
  List<String> imageUrls;     // 图片URL列表（图文动态用）
  List<String> videoUrls;     // 视频URL列表
  String content;             // 内容描述
  Category? category;         // 内容分类
  String? location;           // 位置信息
  List<String> tags;          // 标签列表
  bool isPublic;              // 是否公开
  DateTime? scheduledTime;    // 定时发布时间

  PublishPostModel({
    this.postType = PostType.text,
    this.coverUrl,
    this.imageUrls = const [],
    this.videoUrls = const [],
    this.content = '',
    this.category,
    this.location,
    this.tags = const [],
    this.isPublic = true,
    this.scheduledTime,
  });

  /// 重置所有字段
  void reset() {
    postType = PostType.text;
    coverUrl = null;
    imageUrls.clear();
    videoUrls.clear();
    content = '';
    category = null;
    location = null;
    tags.clear();
    isPublic = true;
    scheduledTime = null;
  }

  /// 检查是否有效
  bool get isValid {
    // 基本内容检查
    if (content.trim().isEmpty) return false;
    
    // 根据类型检查必要字段
    switch (postType) {
      case PostType.text:
        return imageUrls.isNotEmpty || content.trim().isNotEmpty;
      case PostType.article:
        return content.trim().length >= 50;
      case PostType.video:
        return videoUrls.isNotEmpty;
      case PostType.videoCollection:
        return videoUrls.length > 1;
      case PostType.service:
        return content.trim().length >= 20;
    }
  }

  /// 获取预览文本
  String get previewText {
    if (content.length > 50) {
      return '${content.substring(0, 50)}...';
    }
    return content;
  }

  /// 转换为JSON
  Map<String, dynamic> toJson() {
    return {
      'postType': postType.dbValue, // 使用数据库值而不是中文名称
      'coverUrl': coverUrl,
      'imageUrls': imageUrls,
      'videoUrls': videoUrls,
      'content': content,
      'categoryId': category?.id,
      'location': location,
      'tags': tags,
      'isPublic': isPublic,
      'scheduledTime': scheduledTime?.toIso8601String(),
    };
  }
}

